/**
 * @description: 括号匹配
 * @author: huen2015
 */

// 一个字符串内部可能包含 `{ }` `( )` `[ ]` 三种括号，判断该字符串是否是括号匹配的。<br>
// 如 `(a{b}c)` 就是匹配的， `{a(b` 和 `{a(b}c)` 就是不匹配的。

function match(a: string, b: string): boolean {
	if (
		(a === '(' && b === ')') ||
		(a === '[' && b === ']') ||
		(a === '{' && b === '}')
	)
		return true
	return false
}

export function matchBracket(str: string): boolean {
	const stack: string[] = []
	for (let s of str) {
		if (['(', ')', '[', ']', '{', '}'].includes(s)) {
			const lastStr = stack[stack.length - 1]
			match(lastStr, s) ? stack.pop() : stack.push(s)
		}
	}

	return !stack.length
}

// 功能测试
const str = '{a(b}c)'
const str1 = '(a{[b]ss}c)'
console.log('str', matchBracket(str))
console.log('str1', matchBracket(str1))
